當網站規模持續成長,單體架構會逐漸面臨程式碼過於集中、部署風險提高,以及不同業務彼此影響等問題。此時,架構可以進一步朝服務化與微服務方向演進,將大型應用拆分成多個具備明確責任的小型服務,再搭配容器技術改善部署、環境管理與服務運作方式。
第三篇將從拆分單體應用開始,說明如何依照業務邊界將大型系統拆成垂直應用與微服務。拆分並不是單純把程式碼切成多個專案,而是要先理解業務責任、資料邊界和服務之間的依賴關係。本篇會介紹 DDD 的基本概念,協助讀者從業務角度思考服務邊界,避免因為過度拆分,導致系統變得更加複雜。
當公共功能被多個應用重複使用時,可以透過 Dubbo、Spring Cloud RPC 等方式進行服務化,讓不同服務透過標準協定互相呼叫。隨著服務數量增加,還需要配置中心與服務發現機制,例如 Zookeeper 和 Nacos,協助服務找到彼此、集中管理設定,並處理服務註冊、更新與故障移除等問題。
微服務帶來彈性,也同時增加網路呼叫失敗的可能性。因此,本篇也會介紹限流、熔斷與降級三種常見的保護機制。當某個服務流量過大或暫時失效時,系統可以限制請求數量、停止不必要的連線,或提供簡化結果,避免單一服務故障擴大成整個網站無法使用。
面對不同類型的資料,網站也可能採用多樣化儲存技術,例如使用 HDFS 和 HBase 處理大量資料,使用 Elasticsearch 進行全文搜尋與條件查詢,再透過 RocketMQ 或 Kafka 進行非同步處理、服務解耦與流量削峰。API Gateway 和 ESB 則可以統一外部入口、協定轉換、路由管理與權限控制,讓使用者不需要直接面對內部複雜的微服務。
第四篇將延伸介紹 Docker,解決微服務常見的部署地獄。傳統部署容易因作業系統、函式庫版本和環境設定不同而產生問題,Docker 則能將應用程式、執行環境與相依套件打包成標準化單元。本篇會說明虛擬機與容器的差異,以及 Image、Container 和 Repository 三個核心概念。
讀者也會實作 Dockerfile,將微服務封裝成可重複部署的映像檔,再使用 Docker Compose 一次啟動微服務、Redis、MySQL 與 Nginx。最後將介紹 Bridge、Host、Overlay 等網路模式,以及 Volume 和 Bind Mount 的資料持久化方式。Docker 能簡化單機部署,但當容器數量成長到數百甚至數千個時,仍需要更完整的容器編排與管理平台。這兩篇將帶領讀者理解網站如何從服務拆分,逐步走向標準化、可移植和可擴展的容器化架構。